package cn.bluech.lib.ui.widget.paging;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;

/**
 * Description: 分页加载的RecyclerView，数量比较少的时候会出现滑动不加载问题
 *   如果需要像聊天页面那要倒着加载，只需要设置RecyclerView倒置即可：
 *     LinearLayoutManager layout = new LinearLayoutManager(this);
 *     layout.setStackFromEnd(true);//列表再底部开始展示，反转后由上面开始展示
 *     layout.setReverseLayout(true);//列表翻转
 *     rv.setLayoutManager(layout);
 *     有一个问题就是新消息来时会把数据往上推
 * Create by Codeant on 2018/10/26.
 */
public class PagingRecyclerView extends RecyclerView {
    private PagingAdapterWrapper adapterWrapper;

    public PagingRecyclerView(Context context) {
        this(context,null);
    }

    public PagingRecyclerView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public PagingRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        adapterWrapper = new PagingAdapterWrapper(context);
    }

    @Override
    public void setAdapter(Adapter adapter) {
        super.setAdapter(null);
        adapterWrapper.setAdapter(adapter);
        super.setAdapter(adapterWrapper);
    }

    public void setLoadingView(View loadingView) {
        adapterWrapper.setLoadingView(loadingView);
    }

    public void setLoadingView(@LayoutRes int id) {
        setLoadingView(View.inflate(getContext(),id,null));
    }

    public void setNonMoreView(View nonMoreView) {
        adapterWrapper.setLoadingView(nonMoreView);
    }

    public void setNonMoreView(@LayoutRes int id) {
        setNonMoreView(View.inflate(getContext(),id,null));
    }


    /**
     * 设置加载器
     */
    public void setLoader(IOnLoad loader) {
        adapterWrapper.setLoader(loader);
    }

    public void reLoad(){
        adapterWrapper.reLoad();
    }

    public interface IOnLoad {
        /**
         * 加载数据接口，如果是异步加载可能会重复调用(还没加载结束会有重入的概率)
         * @param loadPos 要加载的起始位置
         * @return 是否已经全部加载完成，返回true就不再继续加载
         */
        boolean onLoad(int loadPos);
    }
}
